package isdproject.client;

import java.util.ArrayList;

import com.google.gwt.event.dom.client.ClickEvent;
import com.google.gwt.event.dom.client.ClickHandler;
import com.google.gwt.user.client.Window;
import com.google.gwt.user.client.ui.Button;
import com.google.gwt.user.client.ui.Grid;
import com.google.gwt.user.client.ui.HasHorizontalAlignment;
import com.google.gwt.user.client.ui.HasVerticalAlignment;
import com.google.gwt.user.client.ui.HorizontalPanel;
import com.google.gwt.user.client.ui.Label;
import com.google.gwt.user.client.ui.ListBox;
import com.google.gwt.user.client.ui.RootPanel;
import com.google.gwt.user.client.ui.TextBox;
import com.google.gwt.user.client.ui.VerticalPanel;

/**
 * 
 * @author User
 * @version 1.0
 * Les toevoegen ui: kent 2 textboxen, met labels ervoor, 
 * om een klas en een vakcode op te kunnen geven.
 * Kent ook 2 listboxen, met labels ervoor,
 * om een schooldag en een lesuur te kunnen kiezen.
 * Dit kan opgeslagen worden door op de button 'les toevoegen' te clicken.
 * Er is ook een cancel button.
 *
 */
///had eigenlijk moeten zijn: lesUI
public class LesToevoegen_UI
{
	///!!delegate voor opslag
	private final OpslagServiceDelegate osd;
	//losse variabelen
	///eigenlijk zouden er errorlabels in deze ui moeten zitten
	/**
	 * Dit verklarende label heeft een classname zodat hij met css aangepast kan worden.
	 */
	private Label l_klas, l_vakcode, l_schooldag, l_lesuur;
	private TextBox tb_klas, tb_vakcode;
	private ListBox lb_schooldag, lb_lesuur;
	///buttons hoeven hier niet bovenin gespecificeerd te worden, maar is overzichtelijker
	private Button b_lestoevoegen, b_cancel;
	
	
	/**
	 * De constructor voor de UI voor de use case 'les toevoegen'.
	 */
	public LesToevoegen_UI(final OpslagServiceDelegate osd)
	{
		this.osd = osd;
		//losse variabelen instantieren:
		
		l_klas = new Label("Klas");
		//zie css voor begeleidendlabel opmaak
		l_klas.setStylePrimaryName("begeleidendlabel");
		
		l_vakcode = new Label("Vakcode");
		//zie css voor begeleidendlabel opmaak
		l_vakcode.setStylePrimaryName("begeleidendlabel");
		
		l_schooldag = new Label("Schooldag");
		//zie css voor begeleidendlabel opmaak
		l_schooldag.setStylePrimaryName("begeleidendlabel");
		
		l_lesuur = new Label("Lesuur");
		//zie css voor begeleidendlabel opmaak
		l_lesuur.setStylePrimaryName("begeleidendlabel");
		
		tb_klas = new TextBox();
		tb_klas.setVisibleLength(25);
		
		tb_vakcode = new TextBox();
		tb_vakcode.setVisibleLength(25);
		
		lb_schooldag = new ListBox();
		lb_schooldag.addItem("Maandag");
		lb_schooldag.addItem("Dinsdag");
		lb_schooldag.addItem("Woensdag");
		lb_schooldag.addItem("Donderdag");
		lb_schooldag.addItem("Vrijdag");
		lb_schooldag.addItem("Zaterdag");
		lb_schooldag.addItem("Zondag");
		
		lb_lesuur = new ListBox();
		///alle data hierover ontbrak, dus uit t rooster n paar mogelijkheden overgenomen:
		///9:00 ipv 09:00 overigens ook niet ideaal
		///dit gehele 'vaste tijden' systeem niet ideaal
		lb_lesuur.addItem("9:00 - 9:50");
		lb_lesuur.addItem("9:00 - 10:30");
		lb_lesuur.addItem("9:50 - 12:10");
		lb_lesuur.addItem("10:40 - 12:10");
		lb_lesuur.addItem("13:10 - 14:40");
		lb_lesuur.addItem("14:50 - 16:20");
		lb_lesuur.addItem("16:30 - 17:20");
		
		b_lestoevoegen = new Button("Les toevoegen", new ClickHandler()
		{
			public void onClick(ClickEvent event)
			{
				///regular expression nog niet goed gespecificeerd!
				if(!tb_vakcode.getText().matches("[A-Z]+-[A-Z0-9]+-[0-9]+"))///("[a-zA-Z0-9]+[-][a-zA-Z0-9]+[-][0-9]+"))
				{	
					Window.alert("vak code niet goed ingevoerd");
				}
				else if(!tb_klas.getText().matches("[a-z0-9]"))
				{
					Window.alert("Klascode niet goed ingevoerd.");
				}
				///eigenlijk moet nog gecheckt worden of waarden al bestaan
				else
				{
					//Les wordt door het UI toegevoegd aan de database, en al is dit misschien niet geheel logisch, in deze UI wordt direct een klas en vak aangemaakt, dus ook die worden toegevoegd
					///Les les = new Les(lb_lesuur.getItemText(lb_lesuur.getSelectedIndex()), new Vak(tb_vakcode.getText()), new Klas(tb_klas.getText()));
					Vak vak = new Vak(tb_vakcode.getText());
					Klas klas = new Klas(tb_klas.getText());
					Les les = new Les(lb_lesuur.getItemText(lb_lesuur.getSelectedIndex()), vak.getId(), klas.getId());
					osd.addVak(vak);
					osd.addKlas(klas);
					osd.addLes(les);
				}
			}
		});
		b_lestoevoegen.setWidth("120");
		
		b_cancel = new Button("Cancel", new ClickHandler()
		{
			public void onClick(ClickEvent event)
			{
				///nog niet gespecificeerd wat cancel moet doen!
				Window.alert("Cancel");
			}
		});
		b_cancel.setWidth("80");
		
		//widgets toevoegen en layout regelen. 
		//let op! layout zit hem ook in width van labels en buttons
		//of dat nou specifiek gezet is, of komt door de text erop, of door zaken als 'visiblelength'
		Grid g_ = new Grid(12,3);
		g_.setSize("800", "200");
		
		g_.setWidget(0, 0, l_klas);
		g_.setWidget(3, 0, l_vakcode);
		g_.setWidget(6, 0, l_schooldag);
		g_.setWidget(9, 0, l_lesuur);
		g_.setWidget(0, 2, tb_klas);
		g_.setWidget(3, 2, tb_vakcode);
		g_.setWidget(6, 2, lb_schooldag);
		g_.setWidget(9, 2, lb_lesuur);
		g_.setWidget(11, 1, b_lestoevoegen);
		g_.setWidget(11, 2, b_cancel);
		
		RootPanel.get("main").add(g_);
	}
	
}
